package br.com.jvet.relatorio;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import br.com.jvet.entidade.Agendamento;
import br.com.jvet.entidade.MarcacaoConsulta;
import br.com.jvet.mb.LoginMB;
import br.com.jvet.util.FileUtil;

public class ArquivoConfirmacaoPDF implements Serializable {

	private static final long serialVersionUID = 5581594817708565448L;

	public ArquivoConfirmacaoPDF() {
		super();

	}

	public byte[] gerarArquivo(Agendamento agendamento) throws Exception {
		String path;

		Map<String, Object> map = new HashMap<String, Object>();

		path = FileUtil.getDiretorioReal("//jasper//");

		map.put("REPORT_DIR", path + "/");
		map.put("ficha", agendamento.getCodigo());
		map.put("cliente", agendamento.getCliente().getDadosCadastro()
				.getNome()
				+ "(CPF/CNPJ:"
				+ agendamento.getCliente().getDadosCadastro().getCnpjCpf());
		map.put("animal", agendamento.getAnimal().getNomeAnimal());
		map.put("usuario", agendamento.getUsuario().getNome());
		map.put("data", agendamento.getDataMarcada());
		map.put("hora", agendamento.getHoraMarcada());
		map.put("medico", agendamento.getFuncionario().getDadosCadastro()
				.getNome());
		map.put("tipoagendamento", agendamento.getTipoAgendamento()
				.getDescricao());
		map.put("servico",
				agendamento.getMarcacaoConsulta() != null ? agendamento
						.getMarcacaoConsulta().getServico().getDescServico()
						: "");
		map.put("exame", agendamento.getMarcacaoExame() != null ? agendamento
				.getMarcacaoExame().getExame().getDescricao() : "");

		map.put("status", agendamento.getStatusAgendamento().getDescricao());
		map.put("preparo", agendamento.getMarcacaoExame()!=null?agendamento.getMarcacaoExame().getExame().getPreparo():"");

		JREmptyDataSource ED = new JREmptyDataSource();
		JasperPrint jp = JasperFillManager.fillReport(path
				+ "//confirmacao_agendamento.jasper", map, ED);

		byte[] pdf = JasperExportManager.exportReportToPdf(jp);

		String fileName = "ConfirmacaoAgendamento_"
				+ LoginMB.getUsuarioCorrente().getLogin() + ".pdf";

		FileUtil.download(pdf, fileName);
		return pdf;

	}

	public void gerarPDF(Agendamento agendamento) throws Exception {
		String path;

		Map<String, Object> map = new HashMap<String, Object>();

		path = FileUtil.getDiretorioReal("//jasper//");

		map.put("REPORT_DIR", path + "/");
		map.put("ficha", agendamento.getCodigo());
		map.put("cliente", agendamento.getCliente().getDadosCadastro()
				.getNome()
				+ "(CPF/CNPJ:"
				+ agendamento.getCliente().getDadosCadastro().getCnpjCpf());
		map.put("animal", agendamento.getAnimal().getNomeAnimal());
		map.put("usuario", agendamento.getUsuario().getNome());
		map.put("data", agendamento.getDataMarcada());
		map.put("hora", agendamento.getHoraMarcada());
		map.put("medico", agendamento.getFuncionario().getDadosCadastro()
				.getNome());
		map.put("tipoagendamento", agendamento.getTipoAgendamento()
				.getDescricao());
		map.put("servico",
				agendamento.getMarcacaoConsulta() != null ? agendamento
						.getMarcacaoConsulta().getServico().getDescServico()
						: "");
		map.put("exame", agendamento.getMarcacaoExame() != null ? agendamento
				.getMarcacaoExame().getExame().getDescricao() : "");

		map.put("status", agendamento.getStatusAgendamento().getDescricao());
		map.put("preparo", agendamento.getMarcacaoExame()!=null?agendamento.getMarcacaoExame().getExame().getPreparo():"");

		JREmptyDataSource ED = new JREmptyDataSource();
		JasperPrint jp = JasperFillManager.fillReport(path
				+ "//confirmacao_agendamento.jasper", map, ED);

		byte[] pdf = JasperExportManager.exportReportToPdf(jp);

		String fileName = "ConfirmacaoAgendamento_"
				+ LoginMB.getUsuarioCorrente().getLogin() + ".pdf";

		FileUtil.download(pdf, fileName);

	}

	public void gerarReceita(MarcacaoConsulta consulta) throws Exception {
		String path;

		Map<String, Object> map = new HashMap<String, Object>();

		path = FileUtil.getDiretorioReal("//jasper//");

		map.put("REPORT_DIR", path + "/");
		map.put("ficha", consulta.getAgendamento().getCodigo());
		map.put("cliente", consulta.getAgendamento().getCliente()
				.getDadosCadastro().getNome());
		map.put("cnpjcpf", consulta.getAgendamento().getCliente()
				.getDadosCadastro().getCnpjCpf());
		map.put("animal", consulta.getAgendamento().getAnimal().getNomeAnimal());
		map.put("tipoanimal", consulta.getAgendamento().getAnimal()
				.getTipoAnimal().getDescricao());
		map.put("raca", consulta.getAgendamento().getAnimal().getRaca()
				.getDescricao());
		map.put("sexo", consulta.getAgendamento().getAnimal().getGeneroAnimal()
				.getDescricao());
		map.put("idade", consulta.getAgendamento().getAnimal().getIdade());
		map.put("usuario", LoginMB.getUsuarioCorrente().getCodigo()+" - "+LoginMB.getUsuarioCorrente().getNome());

		map.put("veterinario", consulta.getAgendamento().getFuncionario()
				.getMatricula()
				+ "-"
				+ consulta.getAgendamento().getFuncionario().getDadosCadastro()
						.getNome());

		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
				consulta.getReceitas());

		JasperPrint jp = JasperFillManager.fillReport(
				path + "//receita.jasper", map, ds);

		byte[] pdf = JasperExportManager.exportReportToPdf(jp);

		String fileName = "ReceitaMedica_"
				+ consulta.getAgendamento().getCodigo() + "_"
				+ LoginMB.getUsuarioCorrente().getLogin() + ".pdf";

		FileUtil.download(pdf, fileName);

	}

}
